package main.javassist.update;

import javassist.*;

import java.lang.reflect.Method;
import java.nio.channels.ClosedSelectorException;

public class update2 {
    public static void main(String[] args) throws Exception {

        //1.先得到池对象
        ClassPool pool=ClassPool.getDefault();
        //2.新建加载器
        ClassLoader loader =new Loader(pool);
        Class clazz=loader.loadClass("cn.tedu.hello.HelloWorld");
        CtClass ctClass=pool.getCtClass(clazz.getName());
        CtClass[] paramType= {pool.get(String.class.getName())};
      Method[] methods= clazz.getDeclaredMethods();
       java.lang.String s=null;
        for (Method m: methods
             ) {
            s=m.getName();
            System.out.println(s);
        }
        //得到原来的方法
        CtMethod ctMethod = ctClass.getDeclaredMethod(s,paramType);
        //复制新的方法
        ctClass.defrost();
        CtMethod newMethod= CtNewMethod.copy(ctMethod,ctClass,null);
        ctMethod.setName(ctMethod.getName()+"$lsy");
        //4.得到原来的方法
        StringBuilder stringBuilder=new
                StringBuilder();
        stringBuilder.append("{");
        stringBuilder.append("System.out.println(\"执行前\");");
        stringBuilder.append(ctMethod.getName()).append("($$);");
        stringBuilder.append("System.out.println(\"执行后\");");
        stringBuilder.append("}");
        newMethod.setBody(stringBuilder.toString());
        ctClass.addMethod(newMethod);
        clazz=ctClass.toClass();
        clazz.getMethod("hi",String.class).invoke(clazz.newInstance(),"lsy ");
        //5.修改原来的方法
        //6.添加原来的方法
        //7.编译为class文件

    }

}
